<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>1.2. 字符串的其它改进（Other String Changes）</title>
</head>
<body>

</body>
<script>
    //===================1.2.1. 确认子字符串的方法（Methods for Identifying Substrings）====================
    /*
    自 JavaScript 引入了 indexOf() 方法后，开发者们使用它来确认字符串是否存在于其它字符串中。ECMAScript 6 包含以下三种方法来满足相同的需求：

    includes() 方法会在给定文本存在于字符串中的任意位置时返回 true，否则返回 false 。
    startsWith() 方法会在给定文本出现在字符串开头时返回 true，否则返回 false 。
    endsWith() 方法会在给定文本出现在字符串末尾时返回 true，否则返回 false 。

    每个方法都接收两个参数：需要搜索的文本和可选的起始索引值。当提供第二个参数后，includes() 和 startsWith() 会以该索引为起始点进行匹配，
    而 endsWith() 将字符串的长度与参数值相减并将得到的值作为检索的起始点。若第二个参数未提供，includes() 和 startsWith() 会从字符串的起始中开始检索，
    endsWith() 则是从字符串的末尾。
    实际上，第二个参数减少了需要检索的字符串的总量。以下是使用这些方法的演示：
     */
    console.group('----------------------Test: includes()/startWith()/endsWith()-------------');
    var msg = "Hello world!";
    console.log('msg:', msg);

    // 前三次调用不包含第二个参数，所以它们在必要的情况下会检索整个字符串。
    console.log('msg.startsWith("Hello"):', msg.startsWith("Hello"));       // true
    console.log('msg.endsWith("!"):', msg.endsWith("!"));             // true
    console.log('msg.includes("o"):', msg.includes("o"));             // true


    console.log('msg.startsWith("o"):', msg.startsWith("o"));           // false
    console.log('msg.endsWith("world!"):', msg.endsWith("world!"));        // true
    console.log('msg.includes("x"):', msg.includes("x"));             // false

    // 后三次调用只会检索字符串的一部分。调用 msg.startsWith("o", 4) 会从索引值为 4 ，即 "hello" 中的 o 处开始检索。
    // 调用 msg.endsWith("o", 8) 的起始检索位置和前者相同，因为参数 8 会由字符串的长度值（12）减去。
    console.log('msg.startsWith("o", 4):', msg.startsWith("o", 4));        // true
    console.log('msg.endsWith("o", 8):', msg.endsWith("o", 8));          // true
    console.log('msg.includes("o", 8):', msg.includes("o", 8));          // false
    // 调用 msg.includes("o", 8) 则会从索引值为 8，即 "world" 中的 "r" 处开始检索。
    console.groupEnd();
    // 注意： 向 startsWith()，endsWith()，和 includes() 方法传入正则表达式会抛出错误，这和 indexOf() 与 lastIndexOf() 的表现相反，它们会将正则表达式转换为字符串并搜索它。

    //====================1.2.2. repeat() 方法（The repeat() Method）======================================
    console.group('----------------------1.2.2. repeat() 方法（The repeat() Method）-------------');
    /*
    ECMAScript 6 还向字符串添加了 repeat() 方法，它接受一个数字参数作为字符串的重复次数。该方法返回一个重复包含初始字符串的新字符串，重复次数等于参数。例如：
     */
    console.log('"x".repeat(3)的执行结果为:', "x".repeat(3));         // "xxx"
    console.log('"hello".repeat(2)的执行结果为:', "hello".repeat(2));     // "hellohello"
    console.log('"abc".repeat(4)的执行结果为:', "abc".repeat(4));       // "abcabcabcabc"
    console.groupEnd();
    /*
        该方法在同类中最为便利，在操作文本的场景中特别实用。当实现了格式化代码的实用程序（utility）需要添加缩进时，该方法非常适合，像这样：

        // 使用指定的数字添加空格缩进
        var indent = " ".repeat(4),
            indentLevel = 0;

        // 增加缩进
        var newIndent = indent.repeat(++indentLevel);
        首次调用 repeat() 创建包含 4 个空格的字符串，indentLevel 变量会持续追踪缩进的级别。之后，你可以仅通过增加 repeat() 的参数值来改变空格数量。

        ECMAScript 6 同样为正则表达式添加了一些实用的功能来增加它们的适用场景。下一节会简要的介绍它们。
     */


</script>
</html>